home *** CD-ROM | disk | FTP | other *** search
/ Day Cry / Day Cry CD.bin / oh_towns / taropyon / splib / splib.lzh / PRG / ZNSPLAY / ABOUTDLG.C next >
C/C++ Source or Header  |  1993-02-22  |  4KB  |  179 lines

  1. /*************************************************************************
  2. *    About dialog
  3. *************************************************************************/
  4.  
  5. #include    <stdio.h>
  6. #include    <stdlib.h>
  7. #include    <stdarg.h>
  8. #include    <string.h>
  9.  
  10. #include    "znsplay.h"
  11.  
  12. #define    DLG_MINXS    (320)    /* â_âCâAâìâOì┼żâTâCâY    */
  13.  
  14. #define    STR_FNTX    (6)
  15. #define    STR_FNTY    (12)
  16. #define    STR_XS        (STR_FNTX)
  17. #define    STR_YS        (STR_FNTY+2)
  18. #define    STR_BUFSIZ    (4096)
  19. #define    STR_XSL        (76)
  20.  
  21. typedef    struct
  22. {
  23.     EVT_T        *evt;
  24.     MOSTKP        *mosTk;
  25.     int            len;
  26.     char        *sp[32];
  27.     CONST char    *name;
  28.     CONST char    *ver;
  29.     COLOR        strCol;
  30.     COLOR        bacCol;
  31.     COLOR        boxCol;
  32. } DLGPARA_T;
  33.  
  34.  
  35. static    void    dspFunc( DLG_T *dlg )
  36. {
  37.     DLGPARA_T    *para;
  38.     int            len, i, x, evtNo = 0;
  39.     FRAME        fr;
  40.  
  41.     para = dlg->ptr;
  42.     fr.x1 = dlg->fr.x0;
  43.     fr.y1 = dlg->fr.y0;
  44.     fr.x2 = dlg->fr.x0 + dlg->fr.xs - 1;
  45.     fr.y2 = dlg->fr.y0 + dlg->fr.ys - 1;
  46.     if ( para->mosTk == NULL )
  47.     {    para->mosTk = MOS_pushPos( &fr, dlg->fr.xs/2, dlg->fr.ys/2);
  48.     } else
  49.     {    /* ò£ïAé╡é╜é╞é½é╠âJü[â\âïê╩Æué≡ê┌ô«ù╩ò¬ÅCÉ│    */
  50.         para->mosTk->pos.x += (MosX - para->mosTk->newPos.x);
  51.         para->mosTk->pos.y += (MosY - para->mosTk->newPos.y);
  52.         para->mosTk->newPos.x = MosX;
  53.         para->mosTk->newPos.y = MosY;
  54.         MOS_moveFrame( &fr );    /* ê┌ô«ö═ê═    */
  55.         MOS_setPos( para->mosTk->newPos.x, para->mosTk->newPos.y );
  56.     }
  57.  
  58.     /* â_âCâAâìâOèOÿg    */
  59.     boxHol(fr.x1+2, fr.y1+2, fr.x2-2, fr.y2-2, PSET, C_DARK, C_GRAY );
  60.     box   (fr.x1+3, fr.y1+3, fr.x2-3, fr.y2-3, PSET, COLMIX(C_INFO,C_GRAY) );
  61.     box   (fr.x1+4, fr.y1+4, fr.x2-4, fr.y2-4, PSET, COLMIX(C_INFO,C_GRAY) );
  62.     boxHol(fr.x1+5, fr.y1+5, fr.x2-5, fr.y2-5, PSET, C_GRAY, C_DARK );
  63.  
  64.     /*    APPLICATION NAME & VERSION */
  65.     i = (len = strlen(para->name)) * 8  + 8 + (8*4) + strlen(para->ver) * 8;
  66.     x = fr.x1 + (dlg->fr.xs - i)/2;
  67.     DSP_symbol( x, fr.y1+12, 8,16, OPAQUE, DspCtrl.black, dlg->baseCol, 1,0,0,0, para->name );
  68.     DSP_str( x + len *8 + 8, fr.y1+12+7, DspCtrl.black, dlg->baseCol, 8,
  69.         "ver.%s", para->ver );
  70.  
  71.  
  72.     box ( fr.x1 + 9, fr.y1 + 34-2, fr.x2 - 9, fr.y1 + 34 + STR_YS*para->len-1 + 2, PSET, C_DARK );
  73.     boxf( fr.x1 +10, fr.y1 + 34-1, fr.x2 -10, fr.y1 + 34 + STR_YS*para->len-1 + 1, PSET, DspCtrl.white);
  74.     for ( i = 0; i < para->len; ++i )
  75.     {    x = fr.x1 + (dlg->fr.xs - (strlen(para->sp[i])*STR_XS))/2;
  76.         DSP_puts12(
  77.             x, fr.y1+34+STR_YS*i + ((STR_YS-STR_FNTY)/2),
  78.             DspCtrl.black, DspCtrl.white, _Pers_, para->sp[i] );
  79.     }
  80.  
  81.     /*  ëEâNâèâbâN [CANCEL]    */
  82.     _EVT_SETMOS( para->evt, evtNo++, 999, MOSEVT_BTNOLY, BTN_RIGHT,
  83.         0,0,0,0, 0, NULL );
  84.  
  85.     /* â_âCâAâìâOê┌ô«ùp    */
  86.     _EVT_SETMOS_FR( para->evt, evtNo++, 0, MOSEVT_NOACT|MOSEVT_QUICK, BTN_LEFT,
  87.         &fr, DLG_defMoveFunc, dlg );
  88.  
  89. }
  90.  
  91. int        Apl_dlgMsg( int x0, int y0, CONST char *ver, CONST char *name, CONST char *msg, ... )
  92. {
  93.     char        *s;
  94.     char        *tmp = NULL;
  95.     va_list        arg;
  96.     int            i, j, max;
  97.     int            xs, ys;
  98.     int            ch;
  99.     UINT        ec;
  100.     DLGPARA_T    para;
  101.     DLG_T        *dlg = NULL;
  102.     char        page = DspCtrl.writePage;
  103.  
  104.     para.mosTk = NULL;
  105.     para.evt   = NULL;
  106.     para.name  = name;
  107.     para.ver   = ver;
  108.  
  109.     /* ëµû╩ò¬é╠ò╢ÄÜù±èiö[âoâbâtâ@é≡èmò█é╖éΘ    */
  110.     if ( (tmp = malloc(STR_BUFSIZ)) == NULL )
  111.         return    (0x1B);
  112.     va_start( arg, msg );
  113.     vsprintf( tmp, msg, arg );
  114.     va_end();
  115.  
  116.     void    term(void)
  117.     {    if ( dlg )            DLG_close(dlg);
  118.         if ( para.evt )        EVT_free(para.evt);
  119.         if ( para.mosTk )    MOS_popPos( para.mosTk );
  120.         if ( tmp )            free(tmp);
  121.         DSP_writePage(page);
  122.     };
  123.  
  124.     max = ((strlen(name) + 1 + strlen(ver)) * 8 + 5) / 6;
  125.     para.sp[0] = s = tmp;
  126.     para.len = 1;
  127.     j = FALSE;
  128.     i = 0;
  129.     while ( *s )
  130.     {    if ( *s == '\n' || i > STR_XSL )
  131.         {    *s++ = '\0';
  132.             para.sp[para.len] = s;
  133.             i = 0;
  134.             j = TRUE;
  135.         } else
  136.         {    if ( j )
  137.             {    ++para.len;
  138.                 j = FALSE;
  139.             }
  140.             ++s;
  141.             ++i;
  142.         }
  143.         if ( i > max )
  144.             max = i;
  145.     }
  146.     xs = 16 + max * STR_XS + 16;
  147.     if ( xs < DLG_MINXS )
  148.         xs = DLG_MINXS;
  149.     ys = 10 + 20 + 4+ STR_YS * para.len + 4 + 10;
  150.  
  151.     if ( (para.evt = EVT_alloc(NULL,8)) == NULL )
  152.     {    term();
  153.         return (0x1B);
  154.     }
  155.     DSP_writePage(1);
  156.     dlg = DLG_open( x0, y0, xs, ys, C_DLGBASE, dspFunc, ¶ );
  157.     if ( dlg == NULL )
  158.     {    term();
  159.         return (0x1B);
  160.     }
  161.     DLG_dsp( dlg );
  162.  
  163.     LOOP
  164.     {
  165.         MOS_CON();
  166.         ch = EVT_getkey(&ec);
  167.         if ( ch == 0xFFFF && (ec & 0xFF00) == 0xFF00 )
  168.         {    if ( EVT_chk(para.evt, EVTIGN_KEY) > 0 )
  169.             {    ch = 0x1B;
  170.                 break;
  171.             }
  172.         } else
  173.             break;
  174.     }
  175.     term();
  176.     return    (ch);
  177. }
  178.  
  179.